/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import Utilidades.VariaveisEstaticas;
import dao.ManterClienteDAO;
import dao.exceptions.PreexistingEntityException;
import dominio.Cliente;
import java.util.List;
import javax.persistence.PersistenceException;
import javax.persistence.RollbackException;

/**
 *
 * @author Isaac Danilo
 */
public class ManterClienteNegocio {

    private ManterClienteDAO manterClinteDAO;

    public ManterClienteNegocio() {
        manterClinteDAO = new ManterClienteDAO();
    }

    /**
     * Método que irá chamar o create() do DAO, armazenando o cliente no BD.
     *@param clinte Clinte
     * @return SUCESSO(1) caso o clinte seja inserido com êxito; ERRO_DUPLICAÇÃO(2) caso ocorra
     * o clinte já exista; ERRO_BD(3) erro de persistência.
     */
    public int create(Cliente cliente) {
        try {
            manterClinteDAO.create(cliente);
            return VariaveisEstaticas.SUCESSO;
        } catch (RollbackException p) {
            return VariaveisEstaticas.ERRO_DUPLICACAO;
        } catch (Exception e) {
            return VariaveisEstaticas.ERRO_BD;
        }
    }
    /**
     * Método que irá chamar o edit() do DAO, editando o clinte no BD.
     *@param clinte Clinte
     * @return SUCESSO(1) int caso o clinte seja inserido com êxito; ERRO_DUPLICAÇÃO(2) int caso ocorra
     * o clinte já exista; ERRO_BD(3) int erro de persistência.
     */
    public int edit(Cliente cliente) {
        try {
            manterClinteDAO.edit(cliente);
            return VariaveisEstaticas.SUCESSO;
        } catch (RollbackException r) {
            return VariaveisEstaticas.ERRO_DUPLICACAO;
        } catch (Exception e) {
            return VariaveisEstaticas.ERRO_BD;
        }
    }

    /**
     * Método que irá chamar o destroy() do DAO, deletando o clinte no BD.
     *@param clinte Clinte
     * @return SUCESSO(1) int caso o clinte seja inserido com êxito; ERRO_BD(3) int erro de persistência.
     */
    public int destroy(Cliente cliente) {
        try {
            manterClinteDAO.destroy(cliente.getCodigo());
            return VariaveisEstaticas.SUCESSO;
        } catch (Exception e) {
            return VariaveisEstaticas.ERRO_BD;
        }
    }
    /**
     * Método responsável por chamar o método findClinteEntities() do DAO. Retorna uma lista de clintes.
     * @return List<Cliente>
     */
    public List<Cliente> findClienteEntities() {
          return manterClinteDAO.findClienteEntities();
    }
    public Cliente findCliente(Cliente c) {
        return manterClinteDAO.findCliente(c.getCodigo());
    }


}
